package com.shujia.day18;

import java.io.*;
import java.util.ArrayList;

public class Home2 {
    public static void main(String[] args) throws IOException {
        // 从 data/dir1 中将所有的文件和目录复制到 data/dir2

        /*
            分析：
                1.读取dir1下所有的文件和目录
                2.先将目录在dir2下创建，之后再去通过IO流复制文件
         */
        File file = new File("data/dir1");
        ArrayList<File> dir = new ArrayList<>();
        ArrayList<File> files = new ArrayList<>();

        CopyDir.findDirAndFile(file, dir, files);
        System.out.println(dir);
        System.out.println(files);

        //2.先将目录在dir2下创建，之后再去通过IO流复制文件
        File toFile = new File("data/dir2");
        CopyDir.createDir(file,toFile,dir);

        // 3.复制文件
        CopyDir.copyFile(file,toFile,files);

    }
}

class CopyDir {
    public static void findDirAndFile(File startFile, ArrayList<File> dir, ArrayList<File> files) {
        if (startFile.isDirectory()) {
            File[] allFiles = startFile.listFiles();
            for (File file : allFiles) {
                if (file.isDirectory()) {
                    dir.add(file);
                    // 如果遍历到的是目录 那么还需要获取其子目录或文件
                    findDirAndFile(file, dir, files);
                }
                if (file.isFile()) {
                    files.add(file);
                }
            }
        } else {
            files.add(startFile);
        }

    }

    public static void createDir(File file, File toFile, ArrayList<File> dir) {
        for (File fileElem : dir) {
            // 获取出其路径 data\dir1\next1  => data\dir2\next1  => 再创建
            String path = fileElem.getPath().toString();
            String newDirPath = path.replace(file.getPath().toString(), toFile.getPath().toString());
            System.out.println("正在创建："+newDirPath);
            // 创建目录
            new File(newDirPath).mkdirs();
        }
    }


    public static void copyFile(File file, File toFile,ArrayList<File> files) throws IOException {
        for (File fileElem : files) {
            // 创建输入输出流
            BufferedReader bufferedReader = new BufferedReader(new FileReader(fileElem));

            // 对文件路径进行变更替换
            String path = fileElem.getPath().toString();
            String newFilePath = path.replace(file.getPath().toString(), toFile.getPath().toString());

            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(newFilePath));

            // 复制操作
            String readLine = "";
            while ((readLine = bufferedReader.readLine())!=null){
                bufferedWriter.write(readLine);
                bufferedWriter.newLine();
                bufferedWriter.flush();
            }

            // 关闭流
            bufferedWriter.close();
            bufferedReader.close();
        }
    }


}
